home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 3.iso / dist / fw_qt3.idb / usr / freeware / Qt / include / qlistview.h.z / qlistview.h
C/C++ Source or Header  |  2002-04-08  |  17KB  |  537 lines

  1. /****************************************************************************
  2. ** $Id:  qt/qlistview.h   3.0.3   edited Feb 19 15:20 $
  3. **
  4. ** Definition of QListView widget class
  5. **
  6. ** Created : 970809
  7. **
  8. ** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
  9. **
  10. ** This file is part of the widgets module of the Qt GUI Toolkit.
  11. **
  12. ** This file may be distributed under the terms of the Q Public License
  13. ** as defined by Trolltech AS of Norway and appearing in the file
  14. ** LICENSE.QPL included in the packaging of this file.
  15. **
  16. ** This file may be distributed and/or modified under the terms of the
  17. ** GNU General Public License version 2 as published by the Free Software
  18. ** Foundation and appearing in the file LICENSE.GPL included in the
  19. ** packaging of this file.
  20. **
  21. ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
  22. ** licenses may use this file in accordance with the Qt Commercial License
  23. ** Agreement provided with the Software.
  24. **
  25. ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
  26. ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  27. **
  28. ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
  29. **   information about Qt Commercial License Agreements.
  30. ** See http://www.trolltech.com/qpl/ for QPL licensing information.
  31. ** See http://www.trolltech.com/gpl/ for GPL licensing information.
  32. **
  33. ** Contact info@trolltech.com if any conditions of this licensing are
  34. ** not clear to you.
  35. **
  36. **********************************************************************/
  37.  
  38. #ifndef QLISTVIEW_H
  39. #define QLISTVIEW_H
  40.  
  41. #ifndef QT_H
  42. #include "qscrollview.h"
  43. #endif // QT_H
  44.  
  45. #ifndef QT_NO_LISTVIEW
  46.  
  47.  
  48. class QPixmap;
  49. class QFont;
  50. class QHeader;
  51. class QIconSet;
  52.  
  53. class QListView;
  54. struct QListViewPrivate;
  55. struct QCheckListItemPrivate;
  56. class QListViewItemIterator;
  57. class QDragObject;
  58. class QMimeSource;
  59. class QLineEdit;
  60. class QListViewToolTip;
  61.  
  62. class Q_EXPORT QListViewItem : public Qt
  63. {
  64.     friend class QListViewItemIterator;
  65.     friend class QListViewToolTip;
  66. #if defined(Q_CC_MSVC)
  67.     friend class QListViewItem;
  68. #endif
  69.  
  70. public:
  71.     QListViewItem( QListView * parent );
  72.     QListViewItem( QListViewItem * parent );
  73.     QListViewItem( QListView * parent, QListViewItem * after );
  74.     QListViewItem( QListViewItem * parent, QListViewItem * after );
  75.  
  76.     QListViewItem( QListView * parent,
  77.            QString,     QString = QString::null,
  78.            QString = QString::null, QString = QString::null,
  79.            QString = QString::null, QString = QString::null,
  80.            QString = QString::null, QString = QString::null );
  81.     QListViewItem( QListViewItem * parent,
  82.            QString,     QString = QString::null,
  83.            QString = QString::null, QString = QString::null,
  84.            QString = QString::null, QString = QString::null,
  85.            QString = QString::null, QString = QString::null );
  86.  
  87.     QListViewItem( QListView * parent, QListViewItem * after,
  88.            QString,     QString = QString::null,
  89.            QString = QString::null, QString = QString::null,
  90.            QString = QString::null, QString = QString::null,
  91.            QString = QString::null, QString = QString::null );
  92.     QListViewItem( QListViewItem * parent, QListViewItem * after,
  93.            QString,     QString = QString::null,
  94.            QString = QString::null, QString = QString::null,
  95.            QString = QString::null, QString = QString::null,
  96.            QString = QString::null, QString = QString::null );
  97.     virtual ~QListViewItem();
  98.  
  99.     virtual void insertItem( QListViewItem * );
  100.     virtual void takeItem( QListViewItem * );
  101.     virtual void removeItem( QListViewItem *item ) { takeItem( item ); } //obsolete, use takeItem instead
  102.  
  103.     int height() const;
  104.     virtual void invalidateHeight();
  105.     int totalHeight() const;
  106.     virtual int width( const QFontMetrics&,
  107.                const QListView*, int column) const;
  108.     void widthChanged(int column=-1) const;
  109.     int depth() const;
  110.  
  111.     virtual void setText( int, const QString &);
  112.     virtual QString text( int ) const;
  113.  
  114.     virtual void setPixmap( int, const QPixmap & );
  115.     virtual const QPixmap * pixmap( int ) const;
  116.  
  117.     virtual QString key( int, bool ) const;
  118.     virtual int compare( QListViewItem *i, int col, bool ) const;
  119.     virtual void sortChildItems( int, bool );
  120.  
  121.     int childCount() const { return nChildren; }
  122.  
  123.     bool isOpen() const { return open; }
  124.     virtual void setOpen( bool );
  125.     virtual void setup();
  126.  
  127.     virtual void setSelected( bool );
  128.     bool isSelected() const { return selected; }
  129.  
  130.     virtual void paintCell( QPainter *, const QColorGroup & cg,
  131.                 int column, int width, int alignment );
  132.     virtual void paintBranches( QPainter * p, const QColorGroup & cg,
  133.                 int w, int y, int h );
  134.     virtual void paintFocus( QPainter *, const QColorGroup & cg,
  135.                  const QRect & r );
  136.  
  137.     QListViewItem * firstChild() const;
  138.     QListViewItem * nextSibling() const { return siblingItem; }
  139.     QListViewItem * parent() const;
  140.  
  141.     QListViewItem * itemAbove();
  142.     QListViewItem * itemBelow();
  143.  
  144.     int itemPos() const;
  145.  
  146.     QListView *listView() const;
  147.  
  148.     virtual void setSelectable( bool enable );
  149.     bool isSelectable() const { return selectable && enabled; }
  150.  
  151.     virtual void setExpandable( bool );
  152.     bool isExpandable() const { return expandable; }
  153.  
  154.     void repaint() const;
  155.  
  156.     virtual void sort();
  157.     void moveItem( QListViewItem *after );
  158.  
  159.     virtual void setDragEnabled( bool allow );
  160.     virtual void setDropEnabled( bool allow );
  161.     bool dragEnabled() const;
  162.     bool dropEnabled() const;
  163.     virtual bool acceptDrop( const QMimeSource *mime ) const;
  164.  
  165.     void setVisible( bool b );
  166.     bool isVisible() const;
  167.  
  168.     virtual void setRenameEnabled( int col, bool b );
  169.     bool renameEnabled( int col ) const;
  170.     virtual void startRename( int col );
  171.  
  172.     virtual void setEnabled( bool b );
  173.     bool isEnabled() const;
  174.  
  175.     virtual int rtti() const;
  176.     static int RTTI;
  177.  
  178.     virtual void setMultiLinesEnabled( bool b );
  179.     bool multiLinesEnabled() const;
  180.  
  181. protected:
  182.     virtual void enforceSortOrder() const;
  183.     virtual void setHeight( int );
  184.     virtual void activate();
  185.  
  186.     bool activatedPos( QPoint & );
  187. #ifndef QT_NO_DRAGANDDROP
  188.     virtual void dropped( QDropEvent *e );
  189. #endif
  190.     virtual void dragEntered();
  191.     virtual void dragLeft();
  192.     virtual void okRename( int col );
  193.     virtual void cancelRename( int col );
  194.  
  195.     void ignoreDoubleClick();
  196.  
  197. private:
  198.     void init();
  199.     void moveToJustAfter( QListViewItem * );
  200.     void enforceSortOrderBackToRoot();
  201.  
  202.     int ownHeight;
  203.     int maybeTotalHeight;
  204.     int nChildren;
  205.  
  206.     uint lsc: 14;
  207.     uint lso: 1;
  208.     uint open : 1;
  209.     uint selected : 1;
  210.     uint selectable: 1;
  211.     uint configured: 1;
  212.     uint expandable: 1;
  213.     uint is_root: 1;
  214.     uint allow_drag : 1;
  215.     uint allow_drop : 1;
  216.     uint visible : 1;
  217.     uint enabled : 1;
  218.     uint mlenabled : 1;
  219.  
  220.     QListViewItem * parentItem;
  221.     QListViewItem * siblingItem;
  222.     QListViewItem * childItem;
  223.     QLineEdit *renameBox;
  224.     int renameCol;
  225.  
  226.     void * columns;
  227.  
  228.     friend class QListView;
  229. };
  230.  
  231. class QCheckListItem;
  232.  
  233. class Q_EXPORT QListView: public QScrollView
  234. {
  235.     friend class QListViewItemIterator;
  236.     friend class QListViewItem;
  237.     friend class QCheckListItem;
  238.     friend class QListViewToolTip;
  239.  
  240.     Q_OBJECT
  241.     Q_ENUMS( SelectionMode ResizeMode RenameAction )
  242.     Q_PROPERTY( int columns READ columns )
  243.     Q_PROPERTY( bool multiSelection READ isMultiSelection WRITE setMultiSelection DESIGNABLE false )
  244.     Q_PROPERTY( SelectionMode selectionMode READ selectionMode WRITE setSelectionMode )
  245.     Q_PROPERTY( int childCount READ childCount )
  246.     Q_PROPERTY( bool allColumnsShowFocus READ allColumnsShowFocus WRITE setAllColumnsShowFocus )
  247.     Q_PROPERTY( bool showSortIndicator READ showSortIndicator WRITE setShowSortIndicator )
  248.     Q_PROPERTY( int itemMargin READ itemMargin WRITE setItemMargin )
  249.     Q_PROPERTY( bool rootIsDecorated READ rootIsDecorated WRITE setRootIsDecorated )
  250.     Q_PROPERTY( bool showToolTips READ showToolTips WRITE setShowToolTips )
  251.     Q_PROPERTY( ResizeMode resizeMode READ resizeMode WRITE setResizeMode )
  252.     Q_PROPERTY( int treeStepSize READ treeStepSize WRITE setTreeStepSize )
  253.     Q_PROPERTY( RenameAction defaultRenameAction READ defaultRenameAction WRITE setDefaultRenameAction )
  254.  
  255. public:
  256.     QListView( QWidget* parent=0, const char* name=0, WFlags f = 0 );
  257.     ~QListView();
  258.  
  259.     int treeStepSize() const;
  260.     virtual void setTreeStepSize( int );
  261.  
  262.     virtual void insertItem( QListViewItem * );
  263.     virtual void takeItem( QListViewItem * );
  264.     virtual void removeItem( QListViewItem *item ) { takeItem( item ); } // obsolete, use takeItem instead
  265.  
  266.     QHeader * header() const;
  267.  
  268.     virtual int addColumn( const QString &label, int size = -1);
  269.     virtual int addColumn( const QIconSet& iconset, const QString &label, int size = -1);
  270.     virtual void removeColumn( int index );
  271.     virtual void setColumnText( int column, const QString &label );
  272.     virtual void setColumnText( int column, const QIconSet& iconset, const QString &label );
  273.     QString columnText( int column ) const;
  274.     virtual void setColumnWidth( int column, int width );
  275.     int columnWidth( int column ) const;
  276.     enum WidthMode { Manual, Maximum };
  277.     virtual void setColumnWidthMode( int column, WidthMode );
  278.     WidthMode columnWidthMode( int column ) const;
  279.     int columns() const;
  280.  
  281.     virtual void setColumnAlignment( int, int );
  282.     int columnAlignment( int ) const;
  283.  
  284.     void show();
  285.  
  286.     QListViewItem * itemAt( const QPoint & screenPos ) const;
  287.     QRect itemRect( const QListViewItem * ) const;
  288.     int itemPos( const QListViewItem * );
  289.  
  290.     void ensureItemVisible( const QListViewItem * );
  291.  
  292.     void repaintItem( const QListViewItem * ) const;
  293.  
  294.     virtual void setMultiSelection( bool enable );
  295.     bool isMultiSelection() const;
  296.  
  297.     enum SelectionMode { Single, Multi, Extended, NoSelection  };
  298.     void setSelectionMode( SelectionMode mode );
  299.     SelectionMode selectionMode() const;
  300.  
  301.     virtual void clearSelection();
  302.     virtual void setSelected( QListViewItem *, bool );
  303.     bool isSelected( const QListViewItem * ) const;
  304.     QListViewItem * selectedItem() const;
  305.     virtual void setOpen( QListViewItem *, bool );
  306.     bool isOpen( const QListViewItem * ) const;
  307.  
  308.     virtual void setCurrentItem( QListViewItem * );
  309.     QListViewItem * currentItem() const;
  310.  
  311.     QListViewItem * firstChild() const;
  312.     QListViewItem * lastItem() const;
  313.  
  314.     int childCount() const;
  315.  
  316.     virtual void setAllColumnsShowFocus( bool );
  317.     bool allColumnsShowFocus() const;
  318.  
  319.     virtual void setItemMargin( int );
  320.     int itemMargin() const;
  321.  
  322.     virtual void setRootIsDecorated( bool );
  323.     bool rootIsDecorated() const;
  324.  
  325.     virtual void setSorting( int column, bool increasing = TRUE );
  326.     virtual void sort();
  327.  
  328.     virtual void setFont( const QFont & );
  329.     virtual void setPalette( const QPalette & );
  330.  
  331.     bool eventFilter( QObject * o, QEvent * );
  332.  
  333.     QSize sizeHint() const;
  334.     QSize minimumSizeHint() const;
  335.  
  336.     virtual void setShowSortIndicator( bool show );
  337.     bool showSortIndicator() const;
  338.     virtual void setShowToolTips( bool b );
  339.     bool showToolTips() const;
  340.  
  341.     enum ResizeMode { NoColumn, AllColumns, LastColumn };
  342.     virtual void setResizeMode( ResizeMode m );
  343.     ResizeMode resizeMode() const;
  344.  
  345.     QListViewItem * findItem( const QString& text, int column, ComparisonFlags compare = ExactMatch | CaseSensitive ) const;
  346.  
  347.     enum RenameAction { Accept, Reject };
  348.     virtual void setDefaultRenameAction( RenameAction a );
  349.     RenameAction defaultRenameAction() const;
  350.     bool isRenaming() const;
  351.  
  352.  
  353. public slots:
  354.     virtual void clear();
  355.     virtual void invertSelection();
  356.     virtual void selectAll( bool select );
  357.     void triggerUpdate();
  358.     void setContentsPos( int x, int y );
  359.  
  360. signals:
  361.     void selectionChanged();
  362.     void selectionChanged( QListViewItem * );
  363.     void currentChanged( QListViewItem * );
  364.     void clicked( QListViewItem * );
  365.     void clicked( QListViewItem *, const QPoint &, int );
  366.     void pressed( QListViewItem * );
  367.     void pressed( QListViewItem *, const QPoint &, int );
  368.  
  369.     void doubleClicked( QListViewItem * );
  370.     void returnPressed( QListViewItem * );
  371.     void spacePressed( QListViewItem * );
  372.     void rightButtonClicked( QListViewItem *, const QPoint&, int );
  373.     void rightButtonPressed( QListViewItem *, const QPoint&, int );
  374.     void mouseButtonPressed( int, QListViewItem *, const QPoint& , int );
  375.     void mouseButtonClicked( int, QListViewItem *,  const QPoint&, int );
  376.  
  377.     void contextMenuRequested( QListViewItem *, const QPoint &, int );
  378.  
  379.     void onItem( QListViewItem *item );
  380.     void onViewport();
  381.  
  382.     void expanded( QListViewItem *item );
  383.     void collapsed( QListViewItem *item );
  384. #ifndef QT_NO_DRAGANDDROP
  385.     void dropped( QDropEvent *e );
  386. #endif
  387.     void itemRenamed( QListViewItem *item, int col, const QString & );
  388.     void itemRenamed( QListViewItem *item, int col  );
  389.  
  390. protected:
  391.     void contentsMousePressEvent( QMouseEvent * e );
  392.     void contentsMouseReleaseEvent( QMouseEvent * e );
  393.     void contentsMouseMoveEvent( QMouseEvent * e );
  394.     void contentsMouseDoubleClickEvent( QMouseEvent * e );
  395.     void contentsContextMenuEvent( QContextMenuEvent * e );
  396. #ifndef QT_NO_DRAGANDDROP
  397.     void contentsDragEnterEvent( QDragEnterEvent *e );
  398.     void contentsDragMoveEvent( QDragMoveEvent *e );
  399.     void contentsDragLeaveEvent( QDragLeaveEvent *e );
  400.     void contentsDropEvent( QDropEvent *e );
  401.     virtual QDragObject *dragObject();
  402.     virtual void startDrag();
  403. #endif
  404.  
  405.     void focusInEvent( QFocusEvent * e );
  406.     void focusOutEvent( QFocusEvent * e );
  407.  
  408.     void keyPressEvent( QKeyEvent *e );
  409.  
  410.     void resizeEvent( QResizeEvent *e );
  411.     void viewportResizeEvent( QResizeEvent *e );
  412.  
  413.     void showEvent( QShowEvent * );
  414.  
  415.     void drawContentsOffset( QPainter *, int ox, int oy,
  416.                  int cx, int cy, int cw, int ch );
  417.  
  418.     virtual void paintEmptyArea( QPainter *, const QRect & );
  419.     void styleChange( QStyle& );
  420.     void windowActivationChange( bool );
  421.  
  422. protected slots:
  423.     void updateContents();
  424.     void doAutoScroll();
  425.  
  426. private slots:
  427.     void changeSortColumn( int );
  428.     void updateDirtyItems();
  429.     void makeVisible();
  430.     void handleSizeChange( int, int, int );
  431.     void startRename();
  432.  
  433. private:
  434.     void contentsMousePressEventEx( QMouseEvent * e );
  435.     void init();
  436.     void updateGeometries();
  437.     void buildDrawableList() const;
  438.     void reconfigureItems();
  439.     void widthChanged(const QListViewItem*, int c);
  440.     void handleItemChange( QListViewItem *old, bool shift, bool control );
  441.     void selectRange( QListViewItem *from, QListViewItem *to, bool invert, bool includeFirst, bool clearSel = FALSE );
  442.  
  443.     QListViewPrivate * d;
  444.  
  445. private:    // Disabled copy constructor and operator=
  446. #if defined(Q_DISABLE_COPY)
  447.     QListView( const QWidget & );
  448.     QListView &operator=( const QWidget & );
  449. #endif
  450. };
  451.  
  452.  
  453. class Q_EXPORT QCheckListItem : public QListViewItem
  454. {
  455. public:
  456.     enum Type { RadioButton, CheckBox, Controller };
  457.  
  458.     QCheckListItem( QCheckListItem *parent, const QString &text,
  459.             Type = Controller );
  460.     QCheckListItem( QListViewItem *parent, const QString &text,
  461.             Type = Controller );
  462.     QCheckListItem( QListView *parent, const QString &text,
  463.             Type = Controller );
  464.     QCheckListItem( QListViewItem *parent, const QString &text,
  465.             const QPixmap & );
  466.     QCheckListItem( QListView *parent, const QString &text,
  467.             const QPixmap & );
  468.     ~QCheckListItem();
  469.  
  470.     void paintCell( QPainter *,  const QColorGroup & cg,
  471.             int column, int width, int alignment );
  472.     virtual void paintFocus( QPainter *, const QColorGroup & cg,
  473.                  const QRect & r );
  474.     int width( const QFontMetrics&, const QListView*, int column) const;
  475.     void setup();
  476.  
  477.     virtual void setOn( bool );
  478.     bool isOn() const { return on; }
  479.     Type type() const { return myType; }
  480.     QString text() const { return QListViewItem::text( 0 ); }
  481.     QString text( int n ) const { return QListViewItem::text( n ); }
  482.  
  483.     int rtti() const;
  484.     static int RTTI;
  485.  
  486. protected:
  487.     void activate();
  488.     void turnOffChild();
  489.     virtual void stateChange( bool );
  490.  
  491. private:
  492.     void init();
  493.     Type myType;
  494.     bool on;
  495.     QCheckListItem *exclusive;
  496. };
  497.  
  498. class Q_EXPORT QListViewItemIterator
  499. {
  500.     friend struct QListViewPrivate;
  501.     friend class QListView;
  502.     friend class QListViewItem;
  503.  
  504. public:
  505.     QListViewItemIterator();
  506.     QListViewItemIterator( QListViewItem *item );
  507.     QListViewItemIterator( const QListViewItemIterator &it );
  508.     QListViewItemIterator( QListView *lv );
  509.  
  510.     QListViewItemIterator &operator=( const QListViewItemIterator &it );
  511.  
  512.     ~QListViewItemIterator();
  513.  
  514.     QListViewItemIterator &operator++();
  515.     const QListViewItemIterator operator++( int );
  516.     QListViewItemIterator &operator+=( int j );
  517.  
  518.     QListViewItemIterator &operator--();
  519.     const QListViewItemIterator operator--( int );
  520.     QListViewItemIterator &operator-=( int j );
  521.  
  522.     QListViewItem *current() const;
  523.  
  524. protected:
  525.     QListViewItem *curr;
  526.     QListView *listView;
  527.  
  528. private:
  529.     void addToListView();
  530.     void currentRemoved();
  531.  
  532. };
  533.  
  534. #endif // QT_NO_LISTVIEW
  535.  
  536. #endif // QLISTVIEW_H
  537.